package cn.lin.factory;


/**
 * @author liufl E-mail:Huberier@allpyra.com
 * @version 创建时间：2017年8月16日 下午4:14:58
 * 类说明
 */
public class Model {

	/**
	 * 
	 * 封装、继承is-a、多态(方法名相同、参数类型或顺序不同-不关心返回值、抽象（抽象是对实体类的抽象，接口是对行为的规范/抽象）)
	 * 接口成员变量的默认修饰符为：public static final，，方法默认修饰符：public abstract
		       所以我们在interface中定义成员变量的时候，可以
		   1：public static final String name = "张三";
		   2：String name = "张三";
		        以上两种都可以，老司机一般都是第二种。既然是静态最终的变量，也就意味着在外面访问的时候不能修改这个成员变量的值。所以在接口中定义成员变量的，一般都是常量。不会修改的。如果要进行修改的话，定义在接口具体实现类中
	       抽象类成员变量的默认修饰符为friendly（default）同包可见，abstract方法只能被public和protected修饰     
		   public abstract static void f1();  //报错，静态的方法是无法被重写
		   public abstract native void f2();  //报错，本地方法是由本地代码（如C代码）实现的方法
           public abstract synchronized void f3();  //报错，synchronized和方法的实现细节有关，抽象方法不涉及实现细节
           private abstract void f4();  //报错，用private子类是无法访问
           abstract void f5();  //编译通过
                   重载：方法名相同，参数类型或顺序不同
                   重写：方法覆盖，访问修饰符的限制一定要>=父类/接口方法，抛出的异常一定要<=父类/接口方法
	 * Runtime.getRuntime().exec(System.getenv("windir")+"system32shutdown.exe -s -f");
	 * 
	 * 单一职责原则：一个类尽量负责单一功能便于拓展，不至于改个功能把别的功能也改坏了
	 * 开放-封闭原则：对新加功能尽量新增方法而不是修改旧方法，刚上的项目需要改动的尽量把此类以后可能还会改动的逻辑抽象剥离
	 * 里氏替换原则：子类必须能够替换他的父类，并且不影响程序运行
	 * 依赖倒置原则：面向接口编程，而不是面向实现编程
	 * 
	 * 5、单例模式：保证一个类全局只有一个实例被产生，并提供一个全局访问点，1、直接static变量   2、静态内部类中static变量   3、synchronized/lock锁new对象
	 * 1、3、工厂模式--解决对象创建问题，使类的实例化延迟到子类
	 * 简单工厂：二、一个IVO VOImpl 一个factory(switch);;三、工厂：一个IVO VOImpl IFactory 每个FctoryImpl只能返回一个产品树;;一、抽象工厂：多个IVO VOImpl 每个IFactory可以返回多个水平产品族 
	 * 反射获取实体factory:
	 * 	   OperatorVo opt = (OperatorVo) Class.forName(className).newInstance();//弱类型。低效率。只能调用无参构造,Class.forName(“”)返回的是类。Class.forName(“”).newInstance()返回的是object
	 * Client:
	 * 	   OperatorSimpleFactory reflectFactory = new OperatorSimpleFactory();
	 *     OperatorVo reflectOperator = reflectFactory.getOperatorByReflect("cn.lin.factory.OperatorMutiply");
	 * 21、策略模式是一种定义一系列算法的方法，从概念上来看，同样的方法名具体实现不同，减少了各种算法类与使用算法类之间的搞合，使算法独立于它的客户而变化
	 * 13、观察者模式：发布/订阅，一个对象改变需要其他对象同时改变，监听器、MQ
	 * 6、适配器模式：想使用一个已存在的类，但它的接口/方法与现在的需求不一致，而且无法改变原有代码和设计，就可以使用适配器模式，新建子类实现（应优先考虑重构）
	 * 	       适用：旧复杂项目加接口实现、新建项目时内部接口与第三方接口分离
	 * 9、装饰模式：为已有功能添加更多功能，核心职责和装饰功能分开，方便装饰拓展（注意装饰顺序）
	 * 12、代理模式：为其他对象提供一种代理，并以控制对这个对象的访问（在不直接操作对象的情况下,对此对象进行访问）
	 * 4、原型模式;原型模式主要用于对象的复制,1、实现Cloneable接口2、重写clone方法， 
	 * 	        使用原型模式创建对象比直接new一个对象在性能上要好的多，因为Object类的clone方法是一个本地方法，它直接操作内存中的二进制流，特别是复制大对象时，性能的差别非常明显
	 *     注意：1、使用原型模式复制对象不会调用类的构造方法2、会发生深拷贝的只有8种基本类型和string
	 * 14、模版方法模式：定义逻辑骨架,逻辑的组成是声明的一些抽象操作，具体操作推迟到子类实现
	 * 10、外观模式（门面模式）：封装复杂算法/子程序，对外提供统一权限访问地址，比如利息计算、上网费用计算、MVC开发、Dubbo封装对外接口，减少了外部直接访问复杂系统/模块的的依赖，提高了高全性
	 * 	       注意：门面模块不参与子系统的业务逻辑，如果依赖的角色有相互调用的关系，则需要将项目调用的角色封装成一个新的角色，聚合到门面中
	 * 2、建造者模式：将一个复杂对象的构造和显示分离，使得同样的构造过程可以创建不同的显示（流程/组件固定，结果不同，如游戏人物（四肢、躯干、头部）、生产汽车（轮胎、地盘、发动机、车架））
	 * 16、状态模式：状态模式将各个状态所对应的操作分离开来，即对于不同的状态，由不同的子类实现具体操作，不同状态的切换由子类实现，
	 * 	        当发现传入参数不是自己这个状态所对应的参数，则自己给Context类切换状态；而策略模式是直接依赖注入到Context类的参数进行选择策略，不存在切换状态的操作练习
		        联系：状态模式和策略模式都是为具有多种可能情形设计的模式，把不同的处理情形抽象为一个相同的接口，符合对扩展开放，对修改封闭的原则。
	                  还有就是，策略模式更具有一般性一些，在实践中，可以用策略模式来封装几乎任何类型的规则，只要在分析过程中听到需要在不同实践应用不同的业务规则，
	                  就可以考虑使用策略模式处理，在这点上策略模式是包含状态模式的功能的，策略模式是一个重要的设计模式
	 * 8、组合模式：把对象组合成树形结构以表示“部分-整体”的层次结构，让客户一致地使用组合结构和单个对象（文件<>目录；；分公司<>总公司都是部分与整体的关系）
	 * 22、备忘录模式：适用功能比较复杂，需要记录和维护属性历史或者提交表单前的数据无效，可以使用暂时存储的备忘录将状态恢复
	 * 23、迭代器模式：提供方法顺序访问聚合对象中的各个元素，而又不暴露该对象的内部表示。Iterator  ResultSet rs = ps.executeQuery();   while (rs.next()) {
	 * 7、桥接模式：不使用继承（强耦合）的情况下把抽象和行为实现分离（需要正确识别出系统中两个独立变化的维度，如手机品牌和手机软件）
	 * 16、命令模式：把请求封装为对象，从而可以用不同的请求对客户参数化；可用对请求排队或记录请求日志，以及支持可撤销的操作
	 * 17、职责链模式：多个对象都有机会处理请求，具体哪个对象处理需要运行时才知道。把这些对象连成一条链，并沿着这条链传递请求，指定有一个对象处理他
	 * 11、享元模式：运用共享技术有效地支持大粒度的对象(final Stirng的字符串常量池系统共享、线程池、连接池),区别于getSession和requestUserSession--每个request共享)
	 * 19、中介者模式：用一个中介对象来封装一系列的对象交互，使各对象不需要显示直接互相调用，可以独立改变他们之间的交互
	 * 		       中介者就是一堆不相干对象的核心，不需要再将请求传递出去，比如去图书馆找阿姨借书，没有就没有了，你在大堂喊谁有书也没人鸟你
	 * 
	 * 18、---解释器模式：
	 * 20、---访问者模式：作用于对象结构中的各元素的操作，在不改变各元素的类的前提下定义作用于这些对象的新操作
	 * 
	 */
	
}

